package com.webermagem.DAO;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.transform.AliasToBeanResultTransformer;

import com.webermagem.model.Diagnostico;
import com.webermagem.model.Intervencao;
import com.webermagem.util.BDUtil;
import com.webermagem.util.HibernateUtil;

public class IntervencaoDAO extends GenericDAO implements Serializable{
	
	private static final long serialVersionUID = -7979448639166049578L;

	public IntervencaoDAO(){
		
	}
	
	@SuppressWarnings("unchecked")
	public List<Intervencao> ListByDescricao(Session session, String descricao) {
		
		if (session == null){
			session = HibernateUtil.getSessionFactory().openSession();
		}
		
		Query query = session.createQuery(" from Intervencao where lower(descricao) like :descricao order by id");
		query.setString("descricao", "%" + descricao.toLowerCase() + "%");
		List<Intervencao> objetoRetornado = query.list();
		session.flush();
		
		return objetoRetornado;
	}
	
	public Object getByDescricao(Session session, String descricao) {

		if (session == null){
			session = HibernateUtil.getSessionFactory().openSession();
		}
		
		Query query = session.createQuery("from Intervencao where descricao = :descricao order by id");
		query.setString("descricao", "%" + descricao.toLowerCase() + "%");
		query.setParameter("descricao", descricao);
		Object objetoRetornado = query.uniqueResult();
		
		session.flush();
		
		return objetoRetornado;
	}
	
	@SuppressWarnings("unchecked")
	public List<Intervencao> listOrdenado(Session session) {
		
		if (session == null){
			session = HibernateUtil.getSessionFactory().openSession();
		}
		
		Query query = session.createQuery(" from Intervencao order by id");
		List<Intervencao> objetoRetornado = query.list();
		session.flush();
		
		return objetoRetornado;
		
	}

	@SuppressWarnings("unchecked")
	public List<Intervencao> listByDiagnosticos(Session session,
			Diagnostico[] listaDiagnosticosSelecionados) {
		
		if (session == null){
			session = HibernateUtil.getSessionFactory().openSession();
		}
		
		// TODO VERIFICAR COMO RECUPERAR SCHEMA
		SQLQuery query = session.createSQLQuery("select i.id, i.descricao " +
				 "from webermagem.tb_intervencoes i, webermagem.tb_diag_interv s " +
				 "where " + BDUtil.gerarInIntervencao(listaDiagnosticosSelecionados) + 
				 " and i.id = s.id_intervencao" +
				 " group by i.id, i.descricao" +
				 " order by i.id, i.descricao");

		List<Intervencao> objetoRetornado = query.setResultTransformer(new AliasToBeanResultTransformer(Intervencao.class))
					    .list();
		
		session.flush();
		
		return objetoRetornado;
		
	}


}
